home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / Ken Long / NewShuttle1.0d4-c / Think / NewShuttle.c < prev    next >
Encoding:
Text File  |  1994-12-04  |  20.6 KB  |  1,023 lines  |  [TEXT/KAHL]

  1. //• NewShuttle.c
  2.  
  3. //• Wire frame shuttle viewer
  4. //• by Eddy Vasile 70451,3333 compuserve
  5. //• Plot points collected from a fortran bbs in 86
  6. //• Ported to Think C™ on 22 June 1993 By Kenneth A.Long.
  7.  
  8. //• A note from Ken Long:
  9. //• This was my second successfull Pascal to C port!  I did have a bit 
  10. //• of help from Mark Hanrek, of AOL fame (he likes to help novice 
  11. //• programmers).
  12. //• I guess I'm going to have to stop calling myself a "novice" 
  13. //• because I'm learning too much!  But I this to help other beginning 
  14. //• C programmers.
  15. //• There's nothing special about this source code, so it's public 
  16. //• domain.
  17. //• I added a 'BNDL' and some color icons, for effect.
  18. //• I hope you have as much fun fiddling with this program as I did!
  19. //• I'm a self-taught C programmer and Pascal porter.
  20.  
  21. //• program ShuttleViewer;
  22.  
  23. #include <math.h>
  24. #include <stdio.h>
  25. #include <stdlib.h>
  26.  
  27. #define over        screenBits.bounds.right
  28. #define down        screenBits.bounds.bottom
  29.  
  30. #define Max_A        300
  31. #define Max_B        124
  32. #define Max_C        259
  33. #define Max_D        631
  34. #define OLDSYSTEM    15
  35.  
  36. //• --------------------------------------------------------------- •//
  37. //• Glow-balls!
  38. //• --------------------------------------------------------------- •//
  39.  
  40. //• Can't drag, but if we could...!
  41. Rect        dragRect;
  42.  
  43. //• The 12" monitor.
  44. Rect            windowBounds;
  45. RgnHandle        mBarRgn, GrayRgn;
  46. short            *mBarHeightPtr;
  47. short            oldMBarHeight;
  48.  
  49. short o_X_angle, o_Y_angle, o_Z_angle, Pc, Ec;
  50.  
  51. double     CH, SH, CP, SP, CB, SB, 
  52.         XV, YV, ZV, 
  53.         X, Y, Z, 
  54.         X3, Y3, Z3, 
  55.         AM, BM, CM, DM, EM, FM, GM, HM, IM, 
  56.         D, P, B, H, U, 
  57.         Vc, 
  58.         U1, V1;
  59.  
  60. double V[Max_A + 1][3];
  61. double E[Max_A + 1];
  62. double data[Max_D];
  63.  
  64. Boolean hasColorQD;
  65. WindowPtr     window;
  66. long         ticks, oldTickCount;
  67.  
  68. //• --------------------------------------------------------------- •//
  69. //• Prototypeland:
  70. //• --------------------------------------------------------------- •//
  71. void HideMenuBar (void);
  72. void ShowMenuBar (void);
  73. Boolean Check_The_Equipment (void);
  74. void main (void);
  75. void Do_Init_Managers (void);
  76. int Init_Variables (void);
  77. void Set_Up_Window (void);
  78. void Main_Event_Loop (void);
  79. void Init_Shuttle_Calc (void);
  80. void Init_Shuttle_Proportions (void);
  81. void Draw_Shuttle_And_Coordinates (void);
  82. void Draw_Shuttle (void);
  83. void Set_Data_Array (void);
  84.  
  85. //• --------------------------------------------------------------- •//
  86.  
  87. void HideMenuBar (void) 
  88. {
  89.     Rect    mBarRect;
  90.  
  91.     GrayRgn = GetGrayRgn ();
  92.     mBarHeightPtr = (short *)  0x0BAA;
  93.     oldMBarHeight = *mBarHeightPtr;
  94.     *mBarHeightPtr = 0;
  95.     mBarRect = qd.screenBits.bounds;
  96.     mBarRect.bottom = mBarRect.top + oldMBarHeight;
  97.     mBarRgn = NewRgn ();
  98.     RectRgn (mBarRgn, &mBarRect);
  99.     UnionRgn (GrayRgn, mBarRgn, GrayRgn);
  100.     PaintOne (0L, mBarRgn);
  101. }
  102.  
  103. void ShowMenuBar (void) 
  104. {
  105.     *mBarHeightPtr = oldMBarHeight;
  106.     DiffRgn (GrayRgn, mBarRgn, GrayRgn);
  107.     DisposeRgn (mBarRgn);
  108. }
  109.  
  110. Boolean Check_The_Equipment ()
  111. {
  112.     SysEnvRec this_Mac;        //• The System Environment Record for your Mac.
  113.     
  114.     SysEnvirons(2,&this_Mac);
  115.     
  116.     if (!this_Mac.hasColorQD)
  117.         return(false);
  118. //    return(NGetTrapAddress(0xAB03, ToolTrap) != 
  119. //           NGetTrapAddress(0xA89F,ToolTrap));
  120. }
  121.  
  122. //• Set the forecolor with a single line.
  123. SetForeColor (short red, short green,short  blue)
  124. {
  125.     RGBColor theColor;
  126.  
  127.     theColor.red = red;
  128.     theColor.green = green;
  129.     theColor.blue = blue;
  130.     RGBForeColor(&theColor);
  131. }
  132.  
  133. //• Set the backcolor with a single line.
  134. SetBackColor (short red, short green,short  blue)
  135. {
  136.     RGBColor theColor;
  137.  
  138.     theColor.red = red;
  139.     theColor.green = green;
  140.     theColor.blue = blue;
  141.     RGBForeColor(&theColor);
  142. }
  143.  
  144. void main (void)
  145. {
  146.     Do_Init_Managers ();
  147.     Check_The_Equipment ();
  148.     Set_Data_Array ();
  149.     Init_Variables ();
  150.     HideMenuBar ();
  151.     Set_Up_Window ();
  152.     HideCursor ();
  153.     Main_Event_Loop ();
  154.     ShowCursor ();
  155.     ShowMenuBar ();
  156. }
  157.  
  158. void Do_Init_Managers (void)
  159. {
  160.     MaxApplZone ();
  161.  
  162.     InitGraf (&qd.thePort);
  163.     InitFonts ();
  164.     InitWindows ();
  165.     InitMenus ();
  166.     TEInit ();
  167.     InitDialogs (nil);
  168.     InitCursor ();
  169. }
  170.  
  171. int Init_Variables (void)
  172. {
  173.     short position, j, Ec, Pc;
  174.  
  175.     position = 0;
  176.     for (Pc = 1; Pc <= Max_B; Pc++)
  177.     {
  178.         for (j = 0; j < 3; j++)
  179.         {
  180.             position = position + 1;
  181.             V [Pc] [j] = data [position] * 0.2; //• This last number controls
  182.         }                                        //• the shuttle's scale.
  183.     }
  184.     for (Ec = 0; Ec < Max_C; Ec++)
  185.     {
  186.         position = position + 1;
  187.         E [Ec] = data [position];
  188.     }
  189. }
  190.  
  191. void Set_Up_Window(void)
  192. {
  193.     SetRect (&windowBounds, 0, 0, over, down);
  194.     
  195.     window = NewWindow(0L, &windowBounds, "\p", true, plainDBox, (WindowPtr)-1L, false, 0);
  196.     SetPort(window);
  197. }
  198.  
  199. //************************************************************************
  200.  
  201. void Main_Event_Loop (void)
  202. {
  203.     Rect shuttleRect;
  204.  
  205.     shuttleRect = windowBounds;
  206.     
  207.     while (! Button ())
  208.     {
  209.         BackColor (blackColor);
  210.         EraseRect(&shuttleRect);
  211.         
  212.         Draw_Shuttle_And_Coordinates ();
  213.         
  214.         Delay (150, &ticks);            //• Delay between views, to enjoy :)
  215.         o_X_angle = o_X_angle + 10;
  216.         o_Y_angle = o_Y_angle + 10;
  217.         o_Z_angle = o_Z_angle + 10;
  218.     }
  219. }
  220.  
  221.  
  222.  
  223. //************************************************************************
  224.  
  225. void Init_Shuttle_Calc (void)
  226. {
  227.     CH =  cos (H);
  228.     SH =  sin (H);
  229.     CP =  cos (P);
  230.     SP =  sin (P);
  231.     CB =  cos (B);
  232.     SB =  sin (B);
  233.     
  234.     AM =  CB * CH - SH * SP * SB;
  235.     BM = -CB * SH - SP * CH * SB;
  236.     CM =  CP * SB;
  237.     DM =  SH * CP;
  238.     EM =  CP * CH;
  239.     FM =  SP;
  240.     GM = -CH * SB - SH * SP * CB;
  241.     HM =  SH * SB - SP * CH * CB;
  242.     IM =  CP * CB;
  243. }
  244.  
  245. //************************************************************************
  246.  
  247. void Init_Shuttle_Proportions (void)
  248. {
  249.     X  = X - XV;
  250.     Y  = Y - YV;
  251.     Z  = Z - ZV;
  252.     X3 = AM * X + BM * Y + CM * Z;
  253.     Y3 = DM * X + EM * Y + FM * Z;
  254.     Z3 = GM * X + HM * Y + IM * Z;
  255.     U  = 135 + 13.5 * D * X3 / Y3;    //• Shuttle stretch/shrink width.
  256.     Vc = 80 - 12.5 * D * Z3 / Y3;    //• Shuttle stretch/shrink length.
  257. }                                    //• (Use 1st or 2nd number.)
  258.  
  259. //************************************************************************
  260.  
  261. void Draw_Shuttle_And_Coordinates (void)
  262. {
  263.     EventRecord theEvent;
  264.     short     Ec, howLong;
  265.     short temp_X, temp_Y, current_line = 1, current_column = 0;
  266.     Str255    number_string_1, number_string_2;
  267.     Str255    oneString = {"\pClick and hold to STOP"};
  268.     
  269.     TextFace (geneva);
  270.     TextSize (9);
  271.     MoveTo (180, 362);
  272.     DrawString ("\p");
  273.     SetForeColor (0xaaaa, 0xaaaa, 0xaaaa);
  274.     MoveTo (over / 2 - (StringWidth (oneString) / 2), down - 2);
  275.     DrawString (oneString);
  276. //    DrawString ("\pClick and HOLD to STOP - Number keys control draw Delay");
  277.     TextFace (0);                    //• System font.
  278.  
  279.     X  = 0;
  280.     Y  = 0;
  281.     Z  = 0;
  282.     X3 = 0;
  283.     Y3 = 0;
  284.     Z3 = 0;
  285.     AM = 0;
  286.     BM = 0;
  287.     CM = 0;
  288.     DM = 0;
  289.     EM = 0;
  290.     FM = 0;
  291.     GM = 0;
  292.     HM = 0;
  293.     IM = 0;
  294.     D  = 0;
  295.     P  = 0;
  296.     B  = 0;
  297.     H  = 0;
  298.     U  = 0;
  299.     Vc = 0;
  300.     U1 = 0;
  301.     V1 = 0;
  302.     D  = 120;
  303.     
  304.     P  = 6.28 * o_X_angle / 255 - 3.1416;
  305.     B  = 6.28 * o_Z_angle / 255;
  306.     H  = 6.28 * o_Y_angle / 255;
  307.  
  308.     Init_Shuttle_Calc ();
  309.     
  310.     XV = - D * CP * SH;
  311.     YV = - D * CP * CH;
  312.     ZV = - D * SP;
  313.     
  314.     for (Ec = 0; Ec < Max_C; Ec++)        //• Starting point.
  315.     {
  316.         X = V [abs (ceil (E [Ec]))] [0];
  317.         Y = V [abs (ceil (E [Ec]))] [1];
  318.         Z = V [abs (ceil (E [Ec]))] [2];
  319.  
  320.         Init_Shuttle_Proportions ();
  321.  
  322.         if (E [Ec] > 0)
  323.         {
  324.             temp_X = ceil( U1 * 2);// + 75 );
  325.             temp_Y = ceil( V1 + 130);//20 );
  326.  
  327. //• --------------------------------------------------------------- •//
  328. //• The following snippet draws the point numbers.            
  329. //• --------------------------------------------------------------- •//
  330.  
  331.             SetForeColor (0xffff, 0xffff, 0x0000);
  332.             MoveTo((current_column * 75), current_line * 11);
  333.             NumToString((long) temp_X, number_string_1 );        //• Show temp_X.
  334.             TextSize (9);
  335.             DrawString( number_string_1 );
  336.             
  337.             MoveTo((current_column * 75) + 27, current_line * 11);
  338.             NumToString((long) temp_Y, number_string_2 );        //• Show temp_Y.
  339.             DrawString( number_string_2 );
  340.             
  341.             Delay (5L, &ticks);
  342.  
  343. //• --------------------------------------------------------------- •//
  344. //• Break from coord drawing to draw a shuttle line.
  345. //• --------------------------------------------------------------- •//
  346.             
  347.             MoveTo (ceil (U1 * 2),         //• Start left.
  348.                     ceil (V1 + 130));    //• Start top.
  349.  
  350.             SetForeColor (0xffff, 0xffff, 0);
  351.             LineTo (ceil (U  * 2),         //• End left.
  352.                     ceil (Vc + 130));    //• End top.
  353.  
  354. //• --------------------------------------------------------------- •//
  355. //• Back to coord drawing to draw again and get ready for next.
  356. //• --------------------------------------------------------------- •//
  357.             
  358.             //• This draws the coord's again in blue
  359.             SetForeColor (0x0000, 0x0000, 0xffff);
  360.             MoveTo((current_column * 75), current_line * 11);
  361.             NumToString((long) temp_X, number_string_1 ); //• Show temp_X.
  362.             DrawString( number_string_1 );
  363.             
  364.             MoveTo((current_column * 75) + 27, current_line * 11);
  365.             NumToString((long) temp_Y, number_string_2 ); //• Show temp_Y.
  366.             DrawString( number_string_2 );
  367.             
  368.             if ( current_line++ > 32 )
  369.             {
  370.                 current_line = 1;
  371.                 current_column++;
  372.             }
  373.             if ( current_column > 6 )
  374.             {
  375.                 current_column = 0;
  376.             }
  377.             TextSize (12);        //• This puts the size back.
  378.             
  379. //• --------------------------------------------------------------- •//
  380.  
  381.         }
  382.         U1 = U;
  383.         V1 = Vc;
  384.     }
  385. }
  386.  
  387. //************************************************************************
  388.  
  389. void Set_Data_Array (void)
  390. {
  391.     data[  1] =    0;
  392.     data[  2] =   -2;
  393.     data[  3] =   46;
  394.     data[  4] =    2;
  395.     data[  5] =   -3;
  396.     data[  6] =   46;
  397.     data[  7] =    2;
  398.     data[  8] =   -5;
  399.     data[  9] =   46;
  400.     data[ 10] =    2;
  401.     data[ 11] =   -7;
  402.     data[ 12] =   46;
  403.     data[ 13] =    0;
  404.     data[ 14] =   -7;
  405.     data[ 15] =   46;
  406.     data[ 16] =   -2;
  407.     data[ 17] =   -7;
  408.     data[ 18] =   46;
  409.     data[ 19] =   -2;
  410.     data[ 20] =   -5;
  411.     data[ 21] =   46;
  412.     data[ 22] =   -2;
  413.     data[ 23] =   -3;
  414.     data[ 24] =   46;
  415.     data[ 25] =    0;
  416.     data[ 26] =   -1;
  417.     data[ 27] =   43;
  418.     data[ 28] =    3;
  419.     data[ 29] =   -2;
  420.     data[ 30] =   43;
  421.     data[ 31] =    4;
  422.     data[ 32] =   -5;
  423.     data[ 33] =   43;
  424.     data[ 34] =    3;
  425.     data[ 35] =   -7;
  426.     data[ 36] =   43;
  427.     data[ 37] =    0;
  428.     data[ 38] =   -8;
  429.     data[ 39] =   43;
  430.     data[ 40] =   -3;
  431.     data[ 41] =   -7;
  432.     data[ 42] =   43;
  433.     data[ 43] =   -4;
  434.     data[ 44] =   -5;
  435.     data[ 45] =   43;
  436.     data[ 46] =   -3;
  437.     data[ 47] =   -2;
  438.     data[ 48] =   43;
  439.     data[ 49] =    0;
  440.     data[ 50] =    2;
  441.     data[ 51] =   38;
  442.     data[ 52] =    5;
  443.     data[ 53] =    0;
  444.     data[ 54] =   38;
  445.     data[ 55] =    6;
  446.     data[ 56] =   -4;
  447.     data[ 57] =   38;
  448.     data[ 58] =    4;
  449.     data[ 59] =   -8;
  450.     data[ 60] =   38;
  451.     data[ 61] =    0;
  452.     data[ 62] =   -9;
  453.     data[ 63] =   38;
  454.     data[ 64] =   -4;
  455.     data[ 65] =   -8;
  456.     data[ 66] =   38;
  457.     data[ 67] =   -6;
  458.     data[ 68] =   -4;
  459.     data[ 69] =   38;
  460.     data[ 70] =   -5;
  461.     data[ 71] =    0;
  462.     data[ 72] =   38;
  463.     data[ 73] =    0;
  464.     data[ 74] =    4;
  465.     data[ 75] =   33;
  466.     data[ 76] =    5;
  467.     data[ 77] =    1;
  468.     data[ 78] =   33;
  469.     data[ 79] =    6;
  470.     data[ 80] =   -5;
  471.     data[ 81] =   33;
  472.     data[ 82] =    4;
  473.     data[ 83] =   -9;
  474.     data[ 84] =   33;
  475.     data[ 85] =    0;
  476.     data[ 86] =  -10;
  477.     data[ 87] =   33;
  478.     data[ 88] =   -4;
  479.     data[ 89] =   -9;
  480.     data[ 90] =   33;
  481.     data[ 91] =   -6;
  482.     data[ 92] =   -5;
  483.     data[ 93] =   33;
  484.     data[ 94] =   -5;
  485.     data[ 95] =    1;
  486.     data[ 96] =   33;
  487.     data[ 97] =    0;
  488.     data[ 98] =    8;
  489.     data[ 99] =   26;
  490.     data[100] =    4;
  491.     data[101] =    7;
  492.     data[102] =   26;
  493.     data[103] =    8;
  494.     data[104] =    2;
  495.     data[105] =   26;
  496.     data[106] =    8;
  497.     data[107] =   -7;
  498.     data[108] =   26;
  499.     data[109] =    0;
  500.     data[110] =  -10;
  501.     data[111] =   26;
  502.     data[112] =   -8;
  503.     data[113] =   -7;
  504.     data[114] =   26;
  505.     data[115] =   -8;
  506.     data[116] =    2;
  507.     data[117] =   26;
  508.     data[118] =   -4;
  509.     data[119] =    7;
  510.     data[120] =   26;
  511.     data[121] =    0;
  512.     data[122] =    8;
  513.     data[123] =   22;
  514.     data[124] =    4;
  515.     data[125] =    8;
  516.     data[126] =   22;
  517.     data[127] =    8;
  518.     data[128] =    3;
  519.     data[129] =   22;
  520.     data[130] =    8;
  521.     data[131] =   -8;
  522.     data[132] =   22;
  523.     data[133] =    0;
  524.     data[134] =  -10;
  525.     data[135] =   22;
  526.     data[136] =   -8;
  527.     data[137] =   -8;
  528.     data[138] =   22;
  529.     data[139] =   -8;
  530.     data[140] =    3;
  531.     data[141] =   22;
  532.     data[142] =   -4;
  533.     data[143] =    8;
  534.     data[144] =   22;
  535.     data[145] =    0;
  536.     data[146] =    8;
  537.     data[147] =   14;
  538.     data[148] =    5;
  539.     data[149] =    7;
  540.     data[150] =   14;
  541.     data[151] =    8;
  542.     data[152] =    4;
  543.     data[153] =   14;
  544.     data[154] =    8;
  545.     data[155] =   -9;
  546.     data[156] =   14;
  547.     data[157] =    0;
  548.     data[158] =  -10;
  549.     data[159] =   14;
  550.     data[160] =   -8;
  551.     data[161] =   -9;
  552.     data[162] =   14;
  553.     data[163] =   -8;
  554.     data[164] =    4;
  555.     data[165] =   14;
  556.     data[166] =   -5;
  557.     data[167] =    7;
  558.     data[168] =   14;
  559.     data[169] =    0;
  560.     data[170] =    8;
  561.     data[171] =    4;
  562.     data[172] =    5;
  563.     data[173] =    7;
  564.     data[174] =    4;
  565.     data[175] =    8;
  566.     data[176] =    4;
  567.     data[177] =    4;
  568.     data[178] =    8;
  569.     data[179] =   -9;
  570.     data[180] =    4;
  571.     data[181] =    0;
  572.     data[182] =  -10;
  573.     data[183] =    4;
  574.     data[184] =   -8;
  575.     data[185] =   -9;
  576.     data[186] =    4;
  577.     data[187] =   -8;
  578.     data[188] =    4;
  579.     data[189] =    4;
  580.     data[190] =   -5;
  581.     data[191] =    7;
  582.     data[192] =    4;
  583.     data[193] =    0;
  584.     data[194] =    8;
  585.     data[195] =  -12;
  586.     data[196] =    5;
  587.     data[197] =    7;
  588.     data[198] =  -12;
  589.     data[199] =    8;
  590.     data[200] =    4;
  591.     data[201] =  -12;
  592.     data[202] =    8;
  593.     data[203] =   -9;
  594.     data[204] =  -12;
  595.     data[205] =    0;
  596.     data[206] =  -10;
  597.     data[207] =  -12;
  598.     data[208] =   -8;
  599.     data[209] =   -9;
  600.     data[210] =  -12;
  601.     data[211] =   -8;
  602.     data[212] =    4;
  603.     data[213] =  -12;
  604.     data[214] =   -5;
  605.     data[215] =    7;
  606.     data[216] =  -12;
  607.     data[217] =    0;
  608.     data[218] =    8;
  609.     data[219] =  -27;
  610.     data[220] =    5;
  611.     data[221] =    7;
  612.     data[222] =  -27;
  613.     data[223] =    8;
  614.     data[224] =    4;
  615.     data[225] =  -27;
  616.     data[226] =    8;
  617.     data[227] =   -9;
  618.     data[228] =  -27;
  619.     data[229] =    0;
  620.     data[230] =  -10;
  621.     data[231] =  -27;
  622.     data[232] =   -8;
  623.     data[233] =   -9;
  624.     data[234] =  -27;
  625.     data[235] =   -8;
  626.     data[236] =    4;
  627.     data[237] =  -27;
  628.     data[238] =   -5;
  629.     data[239] =    7;
  630.     data[240] =  -27;
  631.     data[241] =    0;
  632.     data[242] =    8;
  633.     data[243] =  -36;
  634.     data[244] =    5;
  635.     data[245] =    7;
  636.     data[246] =  -36;
  637.     data[247] =    8;
  638.     data[248] =    4;
  639.     data[249] =  -36;
  640.     data[250] =    8;
  641.     data[251] =   -9;
  642.     data[252] =  -36;
  643.     data[253] =    0;
  644.     data[254] =  -10;
  645.     data[255] =  -36;
  646.     data[256] =   -8;
  647.     data[257] =   -9;
  648.     data[258] =  -36;
  649.     data[259] =   -8;
  650.     data[260] =    4;
  651.     data[261] =  -36;
  652.     data[262] =   -5;
  653.     data[263] =    7;
  654.     data[264] =  -36;
  655.     data[265] =    0;
  656.     data[266] =    9;
  657.     data[267] =  -43;
  658.     data[268] =    2;
  659.     data[269] =    9;
  660.     data[270] =  -43;
  661.     data[271] =    9;
  662.     data[272] =    2;
  663.     data[273] =  -43;
  664.     data[274] =    9;
  665.     data[275] =  -10;
  666.     data[276] =  -43;
  667.     data[277] =    0;
  668.     data[278] =  -11;
  669.     data[279] =  -43;
  670.     data[280] =   -9;
  671.     data[281] =  -10;
  672.     data[282] =  -43;
  673.     data[283] =   -9;
  674.     data[284] =    2;
  675.     data[285] =  -43;
  676.     data[286] =   -2;
  677.     data[287] =    9;
  678.     data[288] =  -43;
  679.     data[289] =    0;
  680.     data[290] =   10;
  681.     data[291] =  -48;
  682.     data[292] =    2;
  683.     data[293] =    9;
  684.     data[294] =  -48;
  685.     data[295] =    9;
  686.     data[296] =    2; 
  687.     data[297] =  -48;
  688.     data[298] =   10;
  689.     data[299] =  -10;
  690.     data[300] =  -48; 
  691.     data[301] =    0;
  692.     data[302] =  -10;
  693.     data[303] =  -48;
  694.     data[304] =  -10; 
  695.     data[305] =  -10;
  696.     data[306] =  -48;
  697.     data[307] =   -9;
  698.     data[308] =    2; 
  699.     data[309] =  -48;
  700.     data[310] =   -2;
  701.     data[311] =    9;
  702.     data[312] =  -48; 
  703.     data[313] =    9;
  704.     data[314] =   -9;
  705.     data[315] =   21;
  706.     data[316] =   15; 
  707.     data[317] =   -9;
  708.     data[318] =  -16;
  709.     data[319] =   35;
  710.     data[320] =  -10;
  711.     data[321] =  -36;
  712.     data[322] =   35;
  713.     data[323] =  -10;
  714.     data[324] =  -40;
  715.     data[325] =   -9;
  716.     data[326] =   -9;
  717.     data[327] =   21;
  718.     data[328] =  -15;
  719.     data[329] =   -9;
  720.     data[330] =  -16;
  721.     data[331] =  -35;
  722.     data[332] =  -10;
  723.     data[333] =  -36;
  724.     data[334] =  -35;
  725.     data[335] =  -10;
  726.     data[336] =  -40;
  727.     data[337] =    0;
  728.     data[338] =   13;
  729.     data[339] =  -37;
  730.     data[340] =    0;
  731.     data[341] =   33;
  732.     data[342] =  -60;
  733.     data[343] =    0;
  734.     data[344] =   33;
  735.     data[345] =  -69;
  736.     data[346] =    0;
  737.     data[347] =   14;
  738.     data[348] =  -60;
  739.     data[349] =    6;
  740.     data[350] =   11;
  741.     data[351] =  -43;
  742.     data[352] =    6;
  743.     data[353] =   11;
  744.     data[354] =  -48;
  745.     data[355] =   11;
  746.     data[356] =    5;
  747.     data[357] =  -43;
  748.     data[358] =   11;
  749.     data[359] =    5;
  750.     data[360] =  -48;
  751.     data[361] =   -6;
  752.     data[362] =   11;
  753.     data[363] =  -43;
  754.     data[364] =   -6;
  755.     data[365] =   11;
  756.     data[366] =  -48;
  757.     data[367] =  -11;
  758.     data[368] =    5;
  759.     data[369] =  -43;
  760.     data[370] =  -11;
  761.     data[371] =    5;
  762.     data[372] =  -48;
  763.     data[373] =   -1;
  764.     data[374] =    2;
  765.     data[375] =    3;
  766.     data[376] =    4;
  767.     data[377] =    5;
  768.     data[378] =    6;
  769.     data[379] =    7;
  770.     data[380] =    8;
  771.     data[381] =    1;
  772.     data[382] =   -9;
  773.     data[383] =   10;
  774.     data[384] =   11;
  775.     data[385] =   12;
  776.     data[386] =   13;
  777.     data[387] =   14;
  778.     data[388] =   15;
  779.     data[389] =   16;
  780.     data[390] =    9;
  781.     data[391] =  -17;
  782.     data[392] =   18;
  783.     data[393] =   19;
  784.     data[394] =   20;
  785.     data[395] =   21;
  786.     data[396] =   22;
  787.     data[397] =   23;
  788.     data[398] =   24;
  789.     data[399] =   17;
  790.     data[400] =  -25;
  791.     data[401] =   26;
  792.     data[402] =   27;
  793.     data[403] =   28;
  794.     data[404] =   29;
  795.     data[405] =   30;
  796.     data[406] =   31;
  797.     data[407] =   32;
  798.     data[408] =   25;
  799.     data[409] =  -33;
  800.     data[410] =   34;
  801.     data[411] =   35;
  802.     data[412] =   36;
  803.     data[413] =   37;
  804.     data[414] =   38;
  805.     data[415] =   39;
  806.     data[416] =   40;
  807.     data[417] =   33;
  808.     data[418] =  -41;
  809.     data[419] =   42;
  810.     data[420] =   43;
  811.     data[421] =   44;
  812.     data[422] =   45;
  813.     data[423] =   46;
  814.     data[424] =   47;
  815.     data[425] =   48;
  816.     data[426] =   41;
  817.     data[427] =  -49;
  818.     data[428] =   50;
  819.     data[429] =   51;
  820.     data[430] =   52;
  821.     data[431] =   53;
  822.     data[432] =   54;
  823.     data[433] =   55;
  824.     data[434] =   56;
  825.     data[435] =   49;
  826.     data[436] =  -57;
  827.     data[437] =   58;
  828.     data[438] =   59;
  829.     data[439] =   60;
  830.     data[440] =   61;
  831.     data[441] =   62;
  832.     data[442] =   63;
  833.     data[443] =   64;
  834.     data[444] =   57;
  835.     data[445] =  -65;
  836.     data[446] =   66;
  837.     data[447] =   67;
  838.     data[448] =   68;
  839.     data[449] =   69;
  840.     data[450] =   70;
  841.     data[451] =   71;
  842.     data[452] =   72;
  843.     data[453] =   65;
  844.     data[454] =  -73;
  845.     data[455] =   74;
  846.     data[456] =   75;
  847.     data[457] =   76;
  848.     data[458] =   77;
  849.     data[459] =   78;
  850.     data[460] =   79;
  851.     data[461] =   80;
  852.     data[462] =   73;
  853.     data[463] =  -81;
  854.     data[464] =   82;
  855.     data[465] =   83;
  856.     data[466] =   84;
  857.     data[467] =   85;
  858.     data[468] =   86;
  859.     data[469] =   87;
  860.     data[470] =   88;
  861.     data[471] =   81;
  862.     data[472] =  -89;
  863.     data[473] =   90;
  864.     data[474] =   91;
  865.     data[475] =   92;
  866.     data[476] =   93;
  867.     data[477] =   94;
  868.     data[478] =   95;
  869.     data[479] =   96;
  870.     data[480] =   89;
  871.     data[481] =  -97;
  872.     data[482] =   98;
  873.     data[483] =   99;
  874.     data[484] =  100;
  875.     data[485] =  101;
  876.     data[486] =  102;
  877.     data[487] =  103;
  878.     data[488] =  104;
  879.     data[489] =   97;
  880.     data[490] =   -1;
  881.     data[491] =    9;
  882.     data[492] =   17;
  883.     data[493] =   25;
  884.     data[494] =   33;
  885.     data[495] =   41;
  886.     data[496] =   49;
  887.     data[497] =   57;
  888.     data[498] =   65;
  889.     data[499] =   73;
  890.     data[500] =   81;
  891.     data[501] =   89;
  892.     data[502] =   97;
  893.     data[503] =   -2;
  894.     data[504] =   10;
  895.     data[505] =   18;
  896.     data[506] =   26;
  897.     data[507] =   34;
  898.     data[508] =   42;
  899.     data[509] =   50;
  900.     data[510] =   58;
  901.     data[511] =   66;
  902.     data[512] =   74;
  903.     data[513] =   82;
  904.     data[514] =   90;
  905.     data[515] =   98;
  906.     data[516] =   -3;
  907.     data[517] =   11;
  908.     data[518] =   19;
  909.     data[519] =   27;
  910.     data[520] =   35;
  911.     data[521] =   43;
  912.     data[522] =   51;
  913.     data[523] =   59;
  914.     data[524] =   67;
  915.     data[525] =   75;
  916.     data[526] =   83;
  917.     data[527] =   91;
  918.     data[528] =   99;
  919.     data[529] =   -4;
  920.     data[530] =   12;
  921.     data[531] =   20;
  922.     data[532] =   28;
  923.     data[533] =   36;
  924.     data[534] =   44;
  925.     data[535] =   52;
  926.     data[536] =   60;
  927.     data[537] =   68;
  928.     data[538] =   76;
  929.     data[539] =   84;
  930.     data[540] =   92;
  931.     data[541] =  100;
  932.     data[542] =   -5;
  933.     data[543] =   13;
  934.     data[544] =   21;
  935.     data[545] =   29;
  936.     data[546] =   37;
  937.     data[547] =   45;
  938.     data[548] =   53;
  939.     data[549] =   61;
  940.     data[550] =   69;
  941.     data[551] =   77;
  942.     data[552] =   85;
  943.     data[553] =   93;
  944.     data[554] =  101;
  945.     data[555] =   -6;
  946.     data[556] =   14;
  947.     data[557] =   22;
  948.     data[558] =   30;
  949.     data[559] =   38;
  950.     data[560] =   46;
  951.     data[561] =   54;
  952.     data[562] =   62;
  953.     data[563] =   70;
  954.     data[564] =   78;
  955.     data[565] =   86;
  956.     data[566] =   94;
  957.     data[567] =  102;
  958.     data[568] =   -7;
  959.     data[569] =   15;
  960.     data[570] =   23;
  961.     data[571] =   31;
  962.     data[572] =   39;
  963.     data[573] =   47;
  964.     data[574] =   55;
  965.     data[575] =   63;
  966.     data[576] =   71;
  967.     data[577] =   79;
  968.     data[578] =   87;
  969.     data[579] =   95;
  970.     data[580] =  103;
  971.     data[581] =   -8;
  972.     data[582] =   16;
  973.     data[583] =   24;
  974.     data[584] =   32;
  975.     data[585] =   40;
  976.     data[586] =   48;
  977.     data[587] =   56;
  978.     data[588] =   64;
  979.     data[589] =   72;
  980.     data[590] =   80;
  981.     data[591] =   88;
  982.     data[592] =   96;
  983.     data[593] =  104;
  984.     data[594] =  -44;
  985.     data[595] =  105;
  986.     data[596] =  106;
  987.     data[597] =  107;
  988.     data[598] =  108;
  989.     data[599] =   92;
  990.     data[600] =  -46;
  991.     data[601] =  109;
  992.     data[602] =  110;
  993.     data[603] =  111;
  994.     data[604] =  112;
  995.     data[605] =   94;
  996.     data[606] =  -81;
  997.     data[607] =  113;
  998.     data[608] =  114;
  999.     data[609] =  115;
  1000.     data[610] =  116;
  1001.     data[611] =   89;
  1002.     data[612] =  -82;
  1003.     data[613] =  117;
  1004.     data[614] =  118;
  1005.     data[615] =  -83;
  1006.     data[616] =  119;
  1007.     data[617] =  120;
  1008.     data[618] =  -87;
  1009.     data[619] =  121;
  1010.     data[620] =  122;
  1011.     data[621] =  -88;
  1012.     data[622] =  123;
  1013.     data[623] =  124;
  1014.     data[624] = -117;
  1015.     data[625] =  119;
  1016.     data[626] = -121;
  1017.     data[627] =  123;
  1018.     data[628] = -118;
  1019.     data[629] =  120;
  1020.     data[630] = -122;
  1021.     data[631] =  124;
  1022. }
  1023.